#pragma once

#include <d3d11.h>
#include <vector>

using namespace std;

class VertexBuffer;
class ShaderContainer;
union Matrix;
struct Material;
class Texture2D;
struct IGraphicsResource;

class IDrawable
{
public:
	/////////////////////////<Accessors>///////////////////////////////////////////////////
	virtual ~IDrawable(void) {} 
	
	virtual VertexBuffer* getVertexBuffer(void) const = 0;

	virtual IGraphicsResource** getResourceViews(void) const = 0;

	virtual int getNumResourceViews(void) const = 0;

	virtual ShaderContainer* getShaderContainer(void) const = 0;

	virtual Matrix getWorldTransform(void) const = 0;

	/////////////////////////<Mutators>///////////////////////////////////////////////////

	virtual void setResourceView(IGraphicsResource* value, unsigned int index) = 0;

	virtual void setShaderContainer(ShaderContainer* value) = 0;
};